[File I/O #1] Java 파일 처리의 기본 개념 정리

실행 환경

같은 폴더의 “[File I/O] 파일 라이브러리 이해하기” 노트에서 Java 17 기준으로 설명하고 있으나, 이 폴더에는 Spring Boot 버전이 별도로 명시되어 있지 않다.

목차


File I/O #1 — Java 파일 처리의 기본 개념 정리


핵심 개념 요약

  • Resource: 파일의 위치와 상태를 추상화 (파일이 있는지, 읽을 수 있는지 등)
  • InputStream: 파일에서 데이터를 읽기 위한 추상 클래스 (바이트 단위)
  • OutputStream: 파일에 데이터를 쓰기 위한 추상 클래스 (바이트 단위)

예시 흐름도

[파일 또는 리소스 경로] 
       ↓ (Resource로 추상화)
[Resource] 
       ↓ getInputStream()
[InputStream] → 파일 내용 읽기
       ↓ (원하는 경우)
[OutputStream] → 파일로 저장 또는 출력

 Resource란?

Spring이나 Java에서 다양한 리소스를 접근할 수 있게 해주는 인터페이스입니다.
파일, URL, 클래스패스 등 다양한 위치의 리소스를 같은 방식으로 처리할 수 있게 도와줍니다.

public interface Resource {
    boolean exists();                     // 리소스가 존재하는지 확인
    boolean isReadable();                 // 리소스를 읽을 수 있는지 확인
    InputStream getInputStream();         // 파일 내용을 읽을 수 있는 InputStream 반환
    File getFile();                       // 실제 파일 객체 반환
    String getFilename();                 // 파일 이름 반환
}

InputStream이란?

Java에서 파일이나 네트워크 등에서 바이트 단위로 데이터를 읽을 때 사용하는 추상 클래스입니다.

int read();                    // 한 바이트 읽기
int read(byte[] b);            // 바이트 배열로 읽기
void close();                  // 스트림 닫기
boolean markSupported();       // mark/reset 기능 지원 여부

OutputStream이란?

Java에서 파일, 네트워크 등으로 바이트 단위로 데이터를 쓰는 데 사용하는 추상 클래스입니다.

void write(int b);                    // 한 바이트 쓰기
void write(byte[] b);                 // 바이트 배열 쓰기
void flush();                         // 버퍼 비우기 (즉시 출력)
void close();                         // 스트림 닫기

간단한 코드 흐름 예시

// 파일 경로를 Resource로 추상화
Resource resource = new FileSystemResource("data.txt");

if (resource.exists()) {
    InputStream is = resource.getInputStream();     // 읽기 스트림
    OutputStream os = new FileOutputStream("copy.txt"); // 쓰기 스트림

    int data;
    while ((data = is.read()) != -1) {
        os.write(data);  // 읽은 바이트를 복사
    }

    is.close();
    os.close();
}

정리

  • Resource : 파일이나 URL 같은 리소스를 추상화한 인터페이스 ( 리소스 접근 인터페이스 )
  • InputStream : 바이트 단위 읽기
  • OutputStream : 바이트 단위로 쓰기
  • 일반적 사용법 *
  1. Resource로 위치확인 
  2. InputStream으로 읽기
  3. OutputStream으로 쓰기

관련 문서

  • [(학습/프로젝트/토이프로젝트/파일 업로드&다운로드) [File I/O #2] Resource 구현체 완전 정리]([File I-O #2] Resource 구현체 완전 정리.md) — Resource 개념을 이어받아 5가지 구현체(UrlResource, ClassPathResource 등)를 자세히 다루는 후속 편
  • [(학습/프로젝트/토이프로젝트/파일 업로드&다운로드) [File I/O] 파일 라이브러리 이해하기 (File, Files, Path, Paths)]([File I-O] 파일 라이브러리 이해하기 (File, Files, Path, Paths).md) — Resource/InputStream 기반 접근과 대비되는 java.io.File 및 NIO Path/Files API를 다루는 비교 문서